// 239. 滑动窗口最大值

function maxSlidingWindow(nums: number[], k: number): number[] {
    const que:number[] = []
    const ans:number[] = []


    // 枚举窗口的最后，然后一位一位向后移动窗口
    // que里保存的是index，或者Pair<index,value>
    for(let i=0;i<k;i++){
        const e = nums[i]
        while(que.length&&e>nums[que[que.length-1]]){
            que.pop()
        }
        
        que.push(i)
    }
    ans.push(nums[que[0]])

    for(let i=k;i<nums.length;i++){
        const e = nums[i]
        while(que.length&&e>nums[que[que.length-1]]){
            que.pop()
        }
        que.push(i)
        //去掉窗口外的大值
        while(que[0]<=i-k){
            que.shift()
        }
        ans.push(nums[que[0]])
    }
    return ans
};

console.log(maxSlidingWindow([7,2,4]
    ,2))